Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / Packet.h

Displaying Raw • Download

src/Packet.h HEAD (0679dbef) Text, 4.91 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e<MeshCore.h>

Te6edf3namespace Te6edf3mesh Tb4b4b4{

T8b949e// Packet::header values
Tff7b72#Tff7b72define PH_ROUTE_MASK 0x03 T8b949e// 2-bits
Tff7b72#Tff7b72define PH_TYPE_SHIFT 2
Tff7b72#Tff7b72define PH_TYPE_MASK 0x0F T8b949e// 4-bits
Tff7b72#Tff7b72define PH_VER_SHIFT 6
Tff7b72#Tff7b72define PH_VER_MASK 0x03 T8b949e// 2-bits

Tff7b72#Tff7b72define ROUTE_TYPE_TRANSPORT_FLOOD 0x00 T8b949e// flood mode + transport codes
Tff7b72#Tff7b72define ROUTE_TYPE_FLOOD 0x01 T8b949e// flood mode, needs 'path' to be built up (max 64 bytes)
Tff7b72#Tff7b72define ROUTE_TYPE_DIRECT 0x02 T8b949e// direct route, 'path' is supplied
Tff7b72#Tff7b72define ROUTE_TYPE_TRANSPORT_DIRECT 0x03 T8b949e// direct route + transport codes

Tff7b72#Tff7b72define PAYLOAD_TYPE_REQ 0x00 T8b949e// request (prefixed with dest/src hashes, MAC) (enc data: timestamp, blob)
Tff7b72#Tff7b72define PAYLOAD_TYPE_RESPONSE 0x01 T8b949e// response to REQ or ANON_REQ (prefixed with dest/src hashes, MAC) (enc data: timestamp, blob)
Tff7b72#Tff7b72define PAYLOAD_TYPE_TXT_MSG 0x02 T8b949e// a plain text message (prefixed with dest/src hashes, MAC) (enc data: timestamp, text)
Tff7b72#Tff7b72define PAYLOAD_TYPE_ACK 0x03 T8b949e// a simple ack
Tff7b72#Tff7b72define PAYLOAD_TYPE_ADVERT 0x04 T8b949e// a node advertising its Identity
Tff7b72#Tff7b72define PAYLOAD_TYPE_GRP_TXT 0x05 T8b949e// an (unverified) group text message (prefixed with channel hash, MAC) (enc data: timestamp, "name: msg")
Tff7b72#Tff7b72define PAYLOAD_TYPE_GRP_DATA 0x06 T8b949e// an (unverified) group datagram (prefixed with channel hash, MAC) (enc data: data_type(uint16), data_len, blob)
Tff7b72#Tff7b72define PAYLOAD_TYPE_ANON_REQ 0x07 T8b949e// generic request (prefixed with dest_hash, ephemeral pub_key, MAC) (enc data: ...)
Tff7b72#Tff7b72define PAYLOAD_TYPE_PATH 0x08 T8b949e// returned path (prefixed with dest/src hashes, MAC) (enc data: path, extra)
Tff7b72#Tff7b72define PAYLOAD_TYPE_TRACE 0x09 T8b949e// trace a path, collecting SNR for each hop
Tff7b72#Tff7b72define PAYLOAD_TYPE_MULTIPART 0x0A T8b949e// packet is one of a set of packets
Tff7b72#Tff7b72define PAYLOAD_TYPE_CONTROL 0x0B T8b949e// a control/discovery packet
T8b949e//...
Tff7b72#Tff7b72define PAYLOAD_TYPE_RAW_CUSTOM 0x0F T8b949e// custom packet as raw bytes, for applications with custom encryption, payloads, etc

Tff7b72#Tff7b72define PAYLOAD_VER_1 0x00 T8b949e// 1-byte src/dest hashes, 2-byte MAC
Tff7b72#Tff7b72define PAYLOAD_VER_2 0x01 T8b949e// FUTURE (eg. 2-byte hashes, 4-byte MAC ??)
Tff7b72#Tff7b72define PAYLOAD_VER_3 0x02 T8b949e// FUTURE
Tff7b72#Tff7b72define PAYLOAD_VER_4 0x03 T8b949e// FUTURE

T8b949e/**
* \brief The fundamental transmission unit.
*/
Te6edf3class Te6edf3Packet Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3PacketTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657uint8_t Te6edf3headerTb4b4b4;
Tffa657uint16_t Te6edf3payload_lenTb4b4b4, Te6edf3path_lenTb4b4b4;
Tffa657uint16_t Te6edf3transport_codesTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4;
Tffa657uint8_t Te6edf3pathTb4b4b4[Te6edf3MAX_PATH_SIZETb4b4b4]Tb4b4b4;
Tffa657uint8_t Te6edf3payloadTb4b4b4[Te6edf3MAX_PACKET_PAYLOADTb4b4b4]Tb4b4b4;
Tffa657int8_t Te6edf3_snrTb4b4b4;

T8b949e/**
* \brief calculate the hash of payload + type
* \param dest_hash destination to store the hash (must be MAX_HASH_SIZE bytes)
*/
Tffa657void Td2a8ffcalculatePacketHashTb4b4b4(Tffa657uint8_tTff7b72* Te6edf3dest_hashTb4b4b4) Tff7b72constTb4b4b4;

T8b949e/**
* \returns one of ROUTE_ values
*/
Tffa657uint8_t Td2a8ffgetRouteTypeTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3header Tff7b72& Te6edf3PH_ROUTE_MASKTb4b4b4; Tb4b4b4}

Tffa657bool Td2a8ffisRouteFloodTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_FLOOD Tff7b72|Tff7b72| Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_TRANSPORT_FLOODTb4b4b4; Tb4b4b4}
Tffa657bool Td2a8ffisRouteDirectTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_DIRECT Tff7b72|Tff7b72| Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_TRANSPORT_DIRECTTb4b4b4; Tb4b4b4}

Tffa657bool Td2a8ffhasTransportCodesTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_TRANSPORT_FLOOD Tff7b72|Tff7b72| Te6edf3getRouteTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3ROUTE_TYPE_TRANSPORT_DIRECTTb4b4b4; Tb4b4b4}

T8b949e/**
* \returns one of PAYLOAD_TYPE_ values
*/
Tffa657uint8_t Td2a8ffgetPayloadTypeTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Tb4b4b4(Te6edf3header Tff7b72>Tff7b72> Te6edf3PH_TYPE_SHIFTTb4b4b4) Tff7b72& Te6edf3PH_TYPE_MASKTb4b4b4; Tb4b4b4}

T8b949e/**
* \returns one of PAYLOAD_VER_ values
*/
Tffa657uint8_t Td2a8ffgetPayloadVerTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Tb4b4b4(Te6edf3header Tff7b72>Tff7b72> Te6edf3PH_VER_SHIFTTb4b4b4) Tff7b72& Te6edf3PH_VER_MASKTb4b4b4; Tb4b4b4}

Tffa657uint8_t Td2a8ffgetPathHashSizeTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Tb4b4b4(Te6edf3path_len Tff7b72>Tff7b72> T79c0ff6Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4; Tb4b4b4}
Tffa657uint8_t Td2a8ffgetPathHashCountTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3path_len Tff7b72& T79c0ff63Tb4b4b4; Tb4b4b4}
Tffa657uint8_t Td2a8ffgetPathByteLenTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3getPathHashCountTb4b4b4(Tb4b4b4) Tff7b72* Te6edf3getPathHashSizeTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffsetPathHashCountTb4b4b4(Tffa657uint8_t Te6edf3nTb4b4b4) Tb4b4b4{ Te6edf3path_len Tff7b72&Tff7b72= Tff7b72~T79c0ff63Tb4b4b4; Te6edf3path_len Tff7b72|Tff7b72= Te6edf3nTb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffsetPathHashSizeAndCountTb4b4b4(Tffa657uint8_t Te6edf3szTb4b4b4, Tffa657uint8_t Te6edf3nTb4b4b4) Tb4b4b4{ Te6edf3path_len Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3sz Tff7b72- T79c0ff1Tb4b4b4) Tff7b72<Tff7b72< T79c0ff6Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3n Tff7b72& T79c0ff63Tb4b4b4)Tb4b4b4; Tb4b4b4}

Tff7b72static Tffa657uint8_t Td2a8ffcopyPathTb4b4b4(Tffa657uint8_tTff7b72* Te6edf3destTb4b4b4, Tff7b72const Tffa657uint8_tTff7b72* Te6edf3srcTb4b4b4, Tffa657uint8_t Te6edf3path_lenTb4b4b4)Tb4b4b4; T8b949e// returns path_len
Tff7b72static Tffa657size_t Td2a8ffwritePathTb4b4b4(Tffa657uint8_tTff7b72* Te6edf3destTb4b4b4, Tff7b72const Tffa657uint8_tTff7b72* Te6edf3srcTb4b4b4, Tffa657uint8_t Te6edf3path_lenTb4b4b4)Tb4b4b4; T8b949e// returns byte length written
Tff7b72static Tffa657bool Td2a8ffisValidPathLenTb4b4b4(Tffa657uint8_t Te6edf3path_lenTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffmarkDoNotRetransmitTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3header Tff7b72= T79c0ff0xFFTb4b4b4; Tb4b4b4}
Tffa657bool Td2a8ffisMarkedDoNotRetransmitTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3header Tff7b72=Tff7b72= T79c0ff0xFFTb4b4b4; Tb4b4b4}

Tffa657float Td2a8ffgetSNRTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Tb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3_snrTb4b4b4) Tff7b72/ T79c0ff4.0fTb4b4b4; Tb4b4b4}

T8b949e/**
* \returns the encoded/wire format length of this packet
*/
Tffa657int Td2a8ffgetRawLengthTb4b4b4(Tb4b4b4) Tff7b72constTb4b4b4;

T8b949e/**
* \brief save entire packet as a blob
* \param dest (OUT) destination buffer (assumed to be MAX_MTU_SIZE)
* \returns the packet length
*/
Tffa657uint8_t Td2a8ffwriteToTb4b4b4(Tffa657uint8_t Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4) Tff7b72constTb4b4b4;

T8b949e/**
* \brief restore this packet from a blob (as created using writeTo())
* \param src (IN) buffer containing blob
* \param len the packet length (as returned by writeTo())
*/
Tffa657bool Td2a8ffreadFromTb4b4b4(Tff7b72const Tffa657uint8_t Te6edf3srcTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657uint8_t Te6edf3lenTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s